package com.fjsh.queues;

import com.fjsh.consts.ExchangeConst;
import com.fjsh.consts.QueuesConst;
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TopicQueue {

    //region 话题模式队列
    /**
     * 创建队列
     */
    @Bean
    public Queue testTopicQueue() {
        return new Queue(QueuesConst.TEST_TOPIC_QUEUE, true, false, false);
    }

    /**
     * 创建交换机
     * 话题模式与直连模式区别：RoutingKey可以模糊匹配，两种匹配风格： *匹配 #匹配
     * 我们的RoutingKey和BindKey为一个点分隔的字符串，例：test.routing.client
     * 那么我们的模糊匹配，*可以匹配一个单词，即：*.routing.* 可以匹配到 test.routing.client,
     * #可以匹配多个单词，即：#.client 可以匹配到 test.routing.client,以此类推
     */
    @Bean
    public Exchange testTopicExchange() {
        return new TopicExchange(ExchangeConst.TEST_TOPIC_EXCHANGE);
    }

    /**
     * 绑定队列到交换机并指定一个路由
     */
    @Bean
    public Binding testTopicBinding() {
        return BindingBuilder.bind(testTopicQueue()).to(testTopicExchange()).with("test.*").noargs();
    }
    //endregion
}
